// 逆向动态规划？
// 这部分是最重要的
// 推导公式可得 E` = 2E - h(i);
// 具有单调性，可以从后往前推导即可
// 利用了贪心的性质
#include <iostream>

using namespace std;
typedef long long LL;
const int N = 100010;
int h[N];
int n;
int l = 0, r = 0, max_r;

// 求最值，可以用二分加模拟
// 最大值肯定是所有数中的最大值，可以确保这个一定是正确答案

bool check(int mid)
{
    LL now = mid;
    for(int i = 1; i <= n; ++i)
    {
        if(now >= h[i]) now += now - h[i];
        else now -= h[i] - now;
        // if(mid == 23) cout << now << ' ';
        if(now >= max_r) return true;
        if(now < 0) return false;
    }
    return true;
    // cout << endl;
}

int main()
{
    cin >> n;
    for(int i = 1; i <= n; ++i)
    {
        cin >> h[i];
        r = max(r, h[i]);
    }
    max_r = r;
    while(l < r)
    {
        int mid = l + r >> 1;
        // cout << mid << endl;
        if(check(mid)) r = mid;
        else l = mid + 1;
    }
    cout << l << endl;
    return 0;
}